Skip to content

Common Job spec reporting schema - #432

Merged
gheorghestrimtu merged 7 commits into
mainfrom
RANE-4655-common-job-spec-metrics
Sep 8, 2026
Merged

Common Job spec reporting schema#432
gheorghestrimtu merged 7 commits into
mainfrom
RANE-4655-common-job-spec-metrics

Conversation

@skudasov

@skudasov skudasov commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

RANE-4655

Adds common.v1.CLJobInfo — a job-type-agnostic snapshot of a single Chainlink job, so SOT
can answer "what is this node actually configured to run?" for any job type, not just OCR2.

Consumed by smartcontractkit/chainlink#23227.

Node identity + the job's common fields + optional JD provenance + the full job definition
as a TOML string. spec_toml means no per-type proto and no per-type extractor, including
for job types that don't exist yet. It also matches how JD already moves specs around —
both cfm.ProposeJobRequest and api.job.v1.Proposal carry the TOML as an opaque string.
remote_uuid is the join key back to api.job.v1.Job.uuid.

Timestamps are int64 epoch millis, not google.protobuf.Timestamp. The WKT version
registered fine against staging but never got a Glue table, while NodeBuildInfo from the
same node and emitter kept landing. Nothing registered with chip-ingress from any domain
imports a WKT. Enums and optional are fine (data-feeds/job_spec/v1/job_spec_event.proto
uses both and has a table), so the WKT was the only outlier — swapping it for int64 was
the sole change and the table appeared. Also avoids RFC3339 strings, which Go emits at
variable width so they don't sort chronologically.

Verified on stage (cl-df-eth-sepolia-preprod): 974 rows, 5 nodes, 7 jobs over ~13h, all
20 fields mapped, spec_toml populated on every row. bootstrap jobs are included, which
the OCR2-only telemetry never covered.

Note: fields 18/41/53/54 changed type on the same field numbers. The registry accepted it,
but during rollout the old pods briefly emitted wire type 2 where the registry expected
varint, giving 4 rows with created_at_ms = NULL. Self-resolved — 0 nulls in the 958 rows
since.

@changeset-bot

changeset-bot Bot commented Jul 24, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 56ba47a

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@github-actions

github-actions Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

The latest Buf updates on your PR. Results from workflow Regenerate Protobuf Files / buf (pull_request).

BuildFormatLintBreakingUpdated (UTC)
✅ passed✅ passed✅ passed⏩ skippedSep 8, 2026, 8:33 AM

gheorghestrimtu added a commit to smartcontractkit/chainlink that referenced this pull request Sep 4, 2026
… reporter

Fold core/services/cljobinfo into the existing nodestatusreporter/jobspec
service instead of adding a parallel reporter. CLJobInfo is now emitted for
every job regardless of type, alongside the unchanged OCR2-only JobSpecEvent
track. application.go and the [JobSpecReporter] config are unchanged.

Requires: smartcontractkit/chainlink-protos#432
RANE-4655
Add optional Job Distributor provenance to common.v1.CLJobInfo:
feeds_manager_id (50), remote_uuid (51), spec_version (52), proposed_at (53)
and approved_at (54). They are unset for jobs that did not arrive as an
approved job proposal, which is how a consumer distinguishes a JD-managed job
from one created directly via CLI, UI or TOML on disk. remote_uuid is the join
key back to api.job.v1.Job.uuid.

Document why no JD message is reused for the spec itself: neither
cfm.ProposeJobRequest nor api.job.v1.Proposal models a job's contents, both
carry the TOML document as an opaque string alongside identity metadata, so
spec_toml follows JD's own representation rather than inventing a new one.

Also add the changeset this PR was missing, covering the CLJobInfo addition as
a whole.

RANE-4655

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gheorghestrimtu
gheorghestrimtu previously approved these changes Sep 8, 2026
@gheorghestrimtu
gheorghestrimtu dismissed stale reviews from aleksandarknezevic and themself via 8bc931b September 8, 2026 08:30
@gheorghestrimtu
gheorghestrimtu merged commit 914a0fc into main Sep 8, 2026
22 checks passed
@gheorghestrimtu
gheorghestrimtu deleted the RANE-4655-common-job-spec-metrics branch September 8, 2026 08:52
pull Bot pushed a commit to mikeyhodl/chainlink that referenced this pull request Sep 8, 2026
* wip

* refactor(nodestatusreporter): report every job type from the existing reporter

Fold core/services/cljobinfo into the existing nodestatusreporter/jobspec
service instead of adding a parallel reporter. CLJobInfo is now emitted for
every job regardless of type, alongside the unchanged OCR2-only JobSpecEvent
track. application.go and the [JobSpecReporter] config are unchanged.

Requires: smartcontractkit/chainlink-protos#432
RANE-4655

* refactor(nodestatusreporter): emit CLJobInfo times as protobuf Timestamps

* import in-development chainlink-protos commit

* new chainlink-protos version

* update chainlink-protos

* lint

---------

Co-authored-by: gheorghestrimtu <studentcuza@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants